package com.genius.utils;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class PageUtils {
    /**
     * 设置请求分页数据
     * @param pageNum 页数
     * @param pageSize 每页记录数
     */
    public static void startPage(Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum,pageSize);
    }

    /**
     * 响应请求分页数据
     * @param list 分页后的数据列表
     * @return 封装好的分页信息
     */
    public static Map<String,Object> getResultTableData(List<?> list) {
        PageInfo<?> pageInfo = new PageInfo<>(list);
        Long total = pageInfo.getTotal();
        int pages = pageInfo.getPages();
        pageInfo.getPageSize();
        Map<String,Object> result = new HashMap<>();
        result.put("total",total);
        result.put("pages",pages);
        result.put("list",list);
        return result;
    }

    /**
     * 自定义请求分页数据
     * @param list 分页前数据
     * @param pageNum 页码
     * @param pageSize 每页多少条数据
     * @return 分页后的数据
     */
    public static Map<String,Object> getResultTableData(List<?> list, Integer pageNum, Integer pageSize) {
        if (list == null || list.size() == 0) {
            return null;
        }
        Integer total = list.size(); // 记录总数
        int pages; // 页数
        if (total % pageSize == 0) {
            pages = total / pageSize;
        } else {
            pages = total / pageSize + 1;
        }
        int fromIndex; // 开始索引
        int toIndex; // 结束索引

        if (!pageNum.equals(pages)) {
            fromIndex = (pageNum - 1) * pageSize;
            toIndex = fromIndex + pageSize;
        } else {
            fromIndex = (pageNum - 1) * pageSize;
            toIndex = total;
        }
        List<?> pageList = list.subList(fromIndex, toIndex);

        Map<String,Object> result = new HashMap<>();
        result.put("total",total);
        result.put("pages",pages);
        result.put("list",pageList);
        return result;
    }

    /**
     * 按照分页总数封装分页数据
     * @param list 分页后数据列表
     * @param total 总记录数
     * @param pageSize 每页记录数
     * @return 分页后的数据
     */
    public static Map<String,Object> getResultTableDataByTotal(List<?> list, Integer total, Integer pageSize) {
        int pages; // 页数
        if (total % pageSize == 0) {
            pages = total / pageSize;
        } else {
            pages = total / pageSize + 1;
        }
        Map<String,Object> result = new HashMap<>();
        result.put("total",total);
        result.put("pages",pages);
        result.put("list",list);
        return result;
    }
}